package com.mashibing.juc.c_016;

import java.util.concurrent.TimeUnit;

/**
 * 锁定某个对象o，如果属性发生改变，不影响锁的使用
 * 但是如果o变成另外一个对象，则锁定的对象发生改变
 * 应该避免锁定对象的引用变成另外的对象
 * @author: Yuanzt
 * @Date: 2021/3/26
 */
public class T {

    final Object o = new Object();

    void m(){
        synchronized (o){
            while (true){
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName());
            }
        }
    }

    public static void main(String[] args) {
        T t = new T();
        new Thread(t::m,"t1").start();
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread t2 = new Thread(t::m,"t2");
        //t.o = new Object();//锁定对象发生改变，如果锁定对象不发生改变，t2线程永远得不到执行的机会
        t2.start();
    }
}
